// index.js
const dotenv = require('dotenv');
dotenv.config();
// 打印所有环境变量，检查是否加载成功
console.log(process.env);
const express = require('express');
const { Pool } = require('pg');
const cors = require('cors'); // 引入 cors 中间件
const multer = require('multer');
// 配置 Multer 存储
const storage = multer.memoryStorage();
const upload = multer({
  storage: storage,
  limits: { fileSize: 10 * 1024 * 1024 }, // 限制文件大小为 10MB
}).fields([
  { name: 'svg_data', maxCount: 1 },       // 接收一个名为 svg_data 的文件
  { name: 'colors_by_index', maxCount: 1 } // 接收一个名为 colors_by_index 的字段
]);

// 创建 Express 应用
const app = express();


// 设置允许的请求体大小限制
app.use(express.json({ limit: '10mb' })); // 默认是 100kb，设置为 10MB
app.use(express.urlencoded({ limit: '10mb', extended: true }));
// 使用 cors 中间件，允许所有来源的跨域请求
app.use(cors({
  origin: '*', // 允许所有来源
  methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
  allowedHeaders: ['Content-Type']
}));



// 中间件：解析二进制数据
app.use(express.raw({ type: 'application/octet-stream', limit: '10mb' }));
// 设置 PostgreSQL 连接池
const pool = new Pool({
  user: process.env.DB_USER,
  host: process.env.DB_HOST,
  database: process.env.DB_NAME,
  password: process.env.DB_PASSWORD,
  port: process.env.DB_PORT,
});

// API 路由



// 存储 SVG 图片数据和颜色数据
app.post('/api/images', upload, async (req, res) => {
  try {
    // 获取文件和字段数据
    const svgFile = req.files['svg_data']?.[0]; // svg_data 是文件
    const colorsByIndex = req.body.colors_by_index; // colors_by_index 是字符串

    if (!svgFile || !colorsByIndex) {
      return res.status(400).json({ error: '缺少必需的字段或文件' });
    }

    // 转换 SVG 数据
    const svgData = svgFile.buffer.toString('utf-8');

    // 生成自定义 ID（时间戳 + 随机数）
    const timestamp = Date.now();
    const randomNum = Math.floor(Math.random() * 1000);
    const customId = `${timestamp}${randomNum}`;

    // 插入数据库
    const result = await pool.query(
      'INSERT INTO images (id, svg_data, colors_by_index) VALUES ($1, $2, $3) RETURNING id, created_at',
      [customId, svgData, colorsByIndex]
    );
    const image = result.rows[0];

    // 返回存储成功信息
    res.status(200).json(image);
  } catch (error) {
    console.error('存储图像错误：', error);
    res.status(500).json({ error: '存储图像数据失败' });
  }
});
// 使用 POST 请求查询指定 id 的图片数据
app.post('/api/queryimg', async (req, res) => {
  try {
    const { id } = req.body; // 从请求体中获取 id 参数

    if (!id) {
      return res.status(400).json({ error: '缺少 id 参数' });
    }

    // 查询数据库中指定 id 的图像数据
    const result = await pool.query(
      'SELECT id, svg_data, colors_by_index, created_at FROM images WHERE id = $1',
      [id]
    );

    if (result.rows.length === 0) {
      return res.status(404).json({ error: '未找到匹配的图像数据' });
    }

    // 返回查询到的数据
    res.status(200).json(result.rows[0]);
  } catch (error) {
    console.error('Error fetching image:', error);
    res.status(500).json({ error: '查询图像数据失败' });
  }
});

// 启动服务
const port = process.env.PORT || 3000;
app.listen(port, () => {

  console.log(`在端口上运行的服务器端口号为 ${port}`);
});
